// 库函数、自定义函数

#include<stdio.h>
#include<string.h> // 调用strcpy ()函数使用
// #include<windows.h> // 调用Sleep()函数使用
// #include <stdlib.h> // 调用rand()函数使用
// #include <time.h> // 调用time()函数使用
//---------------------------------------------小节分割线--------------------------------------------
//strcpy 函数的使用，学会查找文档知道不同函数的使用方法
// 参考文档中函数的说明，知道strcpy 的作用是复制字符串
// int main()
// {
//     char arr1[] = "赛博朋克 女V x 银手 甜爆";
//     char arr2[20] = {};
//     strcpy(arr2, arr1);
//     printf("%s\n",arr2);
//     return 0;
// }
//---------------小分割线 >.< --------------------
// memset函数的使用
// int main()
// {
//     char arr[] = "abcdefgggggggg";
//     memset(arr, 'x', 4); // 将arr空间内的前4个字符修改成'x'
//     printf("%s\n",arr);
//     return 0;
// }
//---------------------------------------------小节分割线--------------------------------------------
// 自定义函数
// 自定义函数的基本结构
// ret_type fun_name(para1, * )
// {
//  statement;//语句项
// }
// ret_type 返回类型
// fun_name 函数名
// para1    函数参数
// 使用函数调用的方式，实现选出两个值的较大值
// int get_max(int x,int y)
// {
//     int z = ((x>y)?(x):(y));
//     return z;
// }

// int main()
// {   
//     int a = 10;
//     int b = 20;
//     int max = get_max(a,b);
//     printf("max = %d\n",max);
//     return 0;
// }
//---------------小分割线 >.< --------------------
// 使用函数调用的方式，调换两个整形变量的值

// // int Swap_err(int x, int y) // 这里的x和y是形式参数 - 形参
// // 传值调用
// // {
// //     int tmp = x;
// //     x = y;
// //     y = tmp;
// //     return x, y; // 这样的写法是错误的，C语言的函数只能有一个返回值
// // }

void Swap(int *px, int *py) // void表示这个函数没有返回值
// 传址调用
{
    int tmp = 0;
    tmp = *px;
    *px = *py;
    *py = tmp;
}

int main()
{   
    int a = 10;
    int b = 20;
    printf("a = %d\nb = %d\n",a,b);
    printf("交换两个整形变量的值\n");
    //a, b = Swap(a, b); // 这样的写法是错误的，C语言的函数只能有一个返回值，这里的a和b是实际参数 - 实参
    Swap(&a, &b); // 这才是正确的写法，在函数内部使用指针交换数值
    // 如果不用指针，交换的就是与主函数中a，b无关的x和y，加上C的函数只有一个返回值，不能直接赋值
    printf("a = %d\nb = %d\n",a,b);
    return 0;
}
// ***重点：调用时如果不需要改变主函数中的参数，可以直接传值
// ***重点：如果需要改变主函数的值，则需要将地址传递进去，通过指针修改参数
//---------------------------------------------小节分割线--------------------------------------------
